home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / machines / amiga68k / libsrc / amigalib / libcreatepool.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-26  |  1.3 KB  |  51 lines

  1. #include <pool.h>
  2.  
  3. APTR LibCreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize)
  4. {
  5.   if (SysBase->LibNode.lib_Version>=39)
  6.     return (CreatePool(requirements,puddleSize,threshSize));
  7.   else
  8.   {
  9.     POOL *pool=NULL;
  10.  
  11.     if (puddleSize>threshSize)
  12.     { /* make a multiple of 8 */
  13.       puddleSize=(puddleSize+7)&~7;
  14.       /* alloc pool header */
  15.       if ((pool=(POOL *)AllocMem(sizeof(POOL),MEMF_ANY))!=NULL)
  16.       {
  17.         NewList((struct List *)&pool->PuddleList);
  18.         NewList((struct List *)&pool->ThreshList);
  19.         pool->MemoryFlags=requirements;
  20.         pool->PuddleSize=puddleSize;
  21.         pool->ThreshSize=threshSize;
  22.       }
  23.     }
  24.     return pool;
  25.   }
  26. }
  27.  
  28. VOID LibDeletePool(APTR poolHeader)
  29. {
  30.   if (SysBase->LibNode.lib_Version>=39)
  31.     DeletePool(poolHeader);
  32.   else
  33.     if (poolHeader!=NULL)
  34.     {
  35.       ULONG *pool,size,i;
  36.       struct List *list;
  37.  
  38.       for(i=2,list=(struct List *)&((POOL *)poolHeader)->PuddleList;i;++list,--i)
  39.        {
  40.          while((pool=(ULONG *)RemHead(list))!=NULL)
  41.          {
  42. /*           size=*(--((ULONG *)pool)); */
  43. /*  hat der cast einen tieferen Sinn oder soll der das ganze nur gcc-only machen?   */
  44.            size=*(--(pool));
  45.            FreeMem(pool,size);
  46.          }
  47.        }
  48.       FreeMem(poolHeader,sizeof(POOL));
  49.     }
  50. }
  51.